Saltar al contenido principal

🚜 Proyecto: Happy Farm Manager

¡Bienvenido a la vida rural! En este proyecto serás el gerente de una granja moderna. Tu objetivo es cuidar de tus animales, organizarlos en corrales y recolectar sus productos para el mercado.

Este ejercicio pondrá a prueba tus habilidades con Clases, Polimorfismo y manejo de Listas y Diccionarios.


📋 Requisitos del Proyecto​

1. Sistema de Animales (animales.py)​

Debes crear una clase base y varias subclases para los habitantes de la granja.

Clase Base: Animal​

  • Atributos:
    • nombre: (str) Nombre del animal (ej: "Bessie").
    • edad: (int).
    • salud: (int) De 0 a 100.
  • Métodos:
    • __init__: Constructor.
    • comer(): Incrementa la salud en 10 puntos (sin pasar de 100). Imprime "ñam ñam".
    • producir(): Método base. Debe devolver None o un valor por defecto.
    • __str__: Devuelve una ficha: [Animal] Nombre (Edad) - Salud: X/100.
    • __lt__: Permite ordenar animales por salud (los más enfermos primero, para atenderlos rápido).

Subclases​

Debes crear al menos tres animales distintos. Ejemplos:

  1. Vaca:
    • producir(): Devuelve "Leche" solo si su salud es > 50. Si no, devuelve None.
  2. Gallina:
    • producir(): Devuelve "Huevo".
  3. Oveja:
    • producir(): Devuelve "Lana".

La clave es el Polimorfismo: todos tienen el método producir() pero cada uno da algo distinto.


2. La Granja (granja.py)​

Aquí gestionarás las listas de animales y el almacén.

Clase: Granja​

  • Atributos:

    • nombre: Nombre de tu granja.
    • corrales: Un diccionario que organiza a los animales por tipo.
      • Keys: "Establo", "Gallinero", "Pastor".
      • Values: Listas vacías donde meterás los objetos.
    • almacen: Un diccionario para contar los productos.
      • Ejemplo: {"Leche": 0, "Huevo": 0, "Lana": 0}.
  • Métodos:

    • adquirir_animal(animal, zona): Recibe un objeto Animal y el nombre de la zona ("Establo", etc.). Lo guarda en la lista correspondiente del diccionario corrales.
    • alimentar_todos(): Recorre todos los animales de todos los corrales y llama a su método comer().
    • recolectar(): Recorre todos los animales y llama a producir().
      • Si el animal produce algo (no None), incrementa el contador correspondiente en el almacen.
      • Imprime qué se ha conseguido (ej: "¡Bessie ha dado Leche!").
    • listar_inventario(): Muestra qué tenemos en el almacén.

3. Programa Principal (main.py)​

Crea main.py para simular un día en la granja:

  1. Crea la Granja.
  2. Instancia vacas, gallinas y ovejas.
  3. Mételas en sus zonas correctas (adquirir_animal).
  4. Haz que trabajen: llama a recolectar() (al principio quizás no den nada si tienen poca salud).
  5. Aliméntalos a todos (alimentar_todos).
  6. Vuelve a recolectar.
  7. Muestra el inventario final del almacén.
  8. Prueba de ordenación: Saca todos los animales de una zona, ordénalos por salud con sort() (gracias a __lt__) y muéstralos.

🌟 Puntos Extra​

  • Validaciones: Que no se pueda meter una Gallina en el Establo de vacas (comprobar isinstance).
  • Valor del Almacén: Asigna un precio a cada producto y calcula cuánto dinero ganarías vendiendo todo.

¡A trabajar, granjero! 👩‍🌾